class Solution
{
public:
    int totalFruit(vector<int>& nums)
    {
        int hash[100001] = { 0 };
        int ret = 0;
        for (int left = 0, right = 0, kinds = 0; right < nums.size(); right++)
        {
            if (hash[nums[right]] == 0) kinds++;
            hash[nums[right]]++;

            while (kinds > 2)
            {
                hash[nums[left]]--;
                if (hash[nums[left]] == 0) kinds--;
                left++;
            }
            ret = max(ret, right - left + 1);
        }
        return ret;
    }

    // int totalFruit(vector<int>& nums) 
    // {
    //     int ret = INT_MIN; 
    //     set<int> s;
    //     for(int left = 0,right = 0;right<nums.size();right++)
    //     {
    //         if(s.size()<=2 || s.find(nums[right]) != s.end()) 
    //             s.insert(nums[right]);
    //         if(s.size() <= 2)
    //         ret = max(ret,right-left+1);

    //         while(s.size() == 3)
    //         {
    //             if(nums[left] == nums[left+1])
    //             left++;
    //             else
    //             s.erase(nums[left]), left++;
    //         }
    //     }
    //     return ret;
    // }
};